--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / meshchatx / src / frontend / components / about / AboutPage.vue
Displaying Raw • Download
meshchatx/src/frontend/components/about/AboutPage.vue c8a014b06e36f84b17aa51e24310aaa2f7c6fa12 (c8a014b0) Text, 64.50 KB
Tb4b4b4<Tff7b72templateTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex flex-col flex-1 overflow-hidden min-w-0 bg-gradient-to-br from-slate-50 via-slate-100 to-white dark:from-zinc-950 dark:via-zinc-900 dark:to-zinc-900"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1 overflow-y-auto w-full px-4 md:px-8 py-6 text-gray-900 dark:text-zinc-100"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-6 w-full max-w-4xl mx-auto pb-20"Tb4b4b4>
T8b949e<!-- Basic Info Card -->
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3appInfoTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"glass-card !p-8"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col gap-8 md:flex-row md:items-center"Tb4b4b4>
T8b949e<!-- Logo & Title -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-6"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"w-20 h-20 rounded-3xl bg-blue-500/10 flex items-center justify-center border border-blue-500/20 shadow-xl"
Tb4b4b4>
Tb4b4b4<Tff7b72img Te6edf3srcTff7b72=Ta5d6ff"../../public/favicons/favicon-512x512.png" Te6edf3classTff7b72=Ta5d6ff"w-12 h-12 object-contain" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-1"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"text-4xl font-black text-gray-900 dark:text-white leading-none tracking-tight"
Tb4b4b4>
MeshChatX
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm font-black text-blue-500 uppercase tracking-[0.2em] opacity-80"Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"about.version"Tb4b4b4, Tb4b4b4{ Te6edf3versionTff7b72: Te6edf3appInfoTb4b4b4.Te6edf3version Tb4b4b4}Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1 md:text-right flex flex-wrap justify-start md:justify-end gap-3"Tb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"secondary-chip px-5 py-3 text-sm font-black transition-all hover:scale-105 active:scale-95"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3showTutorialTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-help-circle" Te6edf3sizeTff7b72=Ta5d6ff"20" Te6edf3classTff7b72=Ta5d6ff"mr-2"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"app.tutorial_title"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"secondary-chip px-5 py-3 text-sm font-black transition-all hover:scale-105 active:scale-95"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3showChangelogTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-history" Te6edf3sizeTff7b72=Ta5d6ff"20" Te6edf3classTff7b72=Ta5d6ff"mr-2"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"app.changelog_title"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3isElectronTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"primary-chip px-5 py-3 text-sm font-black transition-all hover:scale-105 active:scale-95"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3relaunchTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-restart" Te6edf3sizeTff7b72=Ta5d6ff"20" Te6edf3classTff7b72=Ta5d6ff"mr-2"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"common.restart_app"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"danger-chip px-5 py-3 text-sm font-black transition-all hover:scale-105 active:scale-95"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3shutdownTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-power" Te6edf3sizeTff7b72=Ta5d6ff"20" Te6edf3classTff7b72=Ta5d6ff"mr-2"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"common.shutdown"Tb4b4b4, Ta5d6ff"Shutdown"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"mt-10 pt-8 border-t border-gray-100 dark:border-zinc-800 flex flex-col md:flex-row md:items-center justify-between gap-6"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-gray-600 dark:text-zinc-400 max-w-xl text-lg leading-relaxed"Tb4b4b4>
A secure, resilient, and beautiful communications platform powered by the
Tb4b4b4<Tff7b72a
Te6edf3hrefTff7b72=Ta5d6ff"https://reticulum.network"
Te6edf3targetTff7b72=Ta5d6ff"_blank"
Te6edf3classTff7b72=Ta5d6ff"text-blue-500 font-black hover:underline decoration-2 underline-offset-4"
Tb4b4b4>Reticulum Network StackTb4b4b4<Tb4b4b4/Tff7b72a
Tb4b4b4>.
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-6 shrink-0"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-right"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"text-[10px] font-black text-gray-400 dark:text-zinc-500 uppercase tracking-[0.2em] leading-none mb-1"
Tb4b4b4>
Database Size
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-2xl font-black text-gray-900 dark:text-white tabular-nums"Tb4b4b4>
Tff7b72{{
Te6edf3formatBytesTb4b4b4(
Te6edf3appInfoTb4b4b4.Te6edf3database_files
Tff7b72? Te6edf3appInfoTb4b4b4.Te6edf3database_filesTb4b4b4.Te6edf3total_bytes
Tff7b72: Te6edf3appInfoTb4b4b4.Te6edf3database_file_size
Tb4b4b4)
Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"w-px h-12 bg-gray-100 dark:bg-zinc-800"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72v-btn
Te6edf3variantTff7b72=Ta5d6ff"tonal"
Te6edf3colorTff7b72=Ta5d6ff"blue"
Te6edf3heightTff7b72=Ta5d6ff"48"
Te6edf3classTff7b72=Ta5d6ff"font-black px-6 rounded-xl"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3showAdvanced Tff7b72= Tff7b72!Te6edf3showAdvancedTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Tb4b4b4:Te6edf3iconTff7b72=Ta5d6ff"Te6edf3showAdvanced Tff7b72? Ta5d6ff'mdi-chevron-up' Tff7b72: Ta5d6ff'mdi-xml'Ta5d6ff" Te6edf3startTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Tff7b72{{ Te6edf3showAdvanced Tff7b72? Ta5d6ff"Hide Advanced" Tff7b72: Ta5d6ff"Advanced Mode" Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72v-btnTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72transition Te6edf3nameTff7b72=Ta5d6ff"fade-blur"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3showAdvancedTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"space-y-6"Tb4b4b4>
T8b949e<!-- Advanced Tech Info -->
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3appInfoTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"glass-card !p-6"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"text-xs font-black text-blue-500 uppercase tracking-[0.2em] mb-6 flex items-center gap-2"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-server" Te6edf3sizeTff7b72=Ta5d6ff"14"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Environment Information
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"grid gap-8 sm:grid-cols-2 lg:grid-cols-3 text-sm"Tb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"glass-label !text-[10px] mb-2 opacity-50"Tb4b4b4>Reticulum ConfigTb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"monospace-field !bg-zinc-50 dark:!bg-zinc-950 break-all text-[11px] !p-3 rounded-xl border border-zinc-100 dark:border-zinc-800"
Tb4b4b4>
Tff7b72{{ Te6edf3appInfoTb4b4b4.Te6edf3reticulum_config_path Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72v-btn
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3isElectronTa5d6ff"
Te6edf3variantTff7b72=Ta5d6ff"tonal"
Te6edf3sizeTff7b72=Ta5d6ff"x-small"
Te6edf3classTff7b72=Ta5d6ff"mt-3 font-black px-3"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3showReticulumConfigFileTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-folder-open" Te6edf3start Te6edf3sizeTff7b72=Ta5d6ff"14"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4> Reveal File
Tb4b4b4<Tb4b4b4/Tff7b72v-btnTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"glass-label !text-[10px] mb-2 opacity-50"Tb4b4b4>Database PathTb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"monospace-field !bg-zinc-50 dark:!bg-zinc-950 break-all text-[11px] !p-3 rounded-xl border border-zinc-100 dark:border-zinc-800"
Tb4b4b4>
Tff7b72{{ Te6edf3appInfoTb4b4b4.Te6edf3database_path Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72v-btn
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3isElectronTa5d6ff"
Te6edf3variantTff7b72=Ta5d6ff"tonal"
Te6edf3sizeTff7b72=Ta5d6ff"x-small"
Te6edf3classTff7b72=Ta5d6ff"mt-3 font-black px-3"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3showDatabaseFileTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-database-search" Te6edf3start Te6edf3sizeTff7b72=Ta5d6ff"14"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4> Reveal DB
Tb4b4b4<Tb4b4b4/Tff7b72v-btnTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex flex-col justify-center space-y-3 bg-zinc-50 dark:bg-zinc-950 p-4 rounded-xl border border-zinc-100 dark:border-zinc-800"
Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3configTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"space-y-3 mb-2 pb-3 border-b border-zinc-100 dark:border-zinc-800"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col"Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"text-[9px] font-black text-blue-500 uppercase tracking-wider"
Tb4b4b4>Identity HashTb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"font-mono text-[10px] break-all opacity-70"Tb4b4b4>Tff7b72{{
Te6edf3configTb4b4b4.Te6edf3identity_hash
Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col"Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"text-[9px] font-black text-blue-500 uppercase tracking-wider"
Tb4b4b4>LXMF AddressTb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"font-mono text-[10px] break-all opacity-70"Tb4b4b4>Tff7b72{{
Te6edf3configTb4b4b4.Te6edf3lxmf_address_hash
Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between"Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"text-[10px] font-black text-blue-500 uppercase tracking-wider"
Tb4b4b4>PythonTb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"font-mono text-xs font-bold"Tb4b4b4>vTff7b72{{ Te6edf3appInfoTb4b4b4.Te6edf3python_version Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between"Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"text-[10px] font-black text-purple-500 uppercase tracking-wider"
Tb4b4b4>LXMFTb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"font-mono text-xs font-bold"Tb4b4b4>vTff7b72{{ Te6edf3appInfoTb4b4b4.Te6edf3lxmf_version Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between"Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"text-[10px] font-black text-indigo-500 uppercase tracking-wider"
Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"font-mono text-xs font-bold"Tb4b4b4>vTff7b72{{ Te6edf3appInfoTb4b4b4.Te6edf3rns_version Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Security & Integrity -->
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3appInfoTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"glass-card !p-6"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col gap-4 md:flex-row md:items-center md:justify-between mb-6"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"text-xs font-black text-blue-500 uppercase tracking-[0.2em] flex items-center gap-2"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-shield-lock" Te6edf3sizeTff7b72=Ta5d6ff"14"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Security & Integrity
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3appInfoTb4b4b4.Te6edf3integrity_issuesTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"flex flex-wrap gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72span
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Te6edf3statusPillClassTb4b4b4(Te6edf3appInfoTb4b4b4.Te6edf3integrity_issuesTb4b4b4.Te6edf3length Tff7b72=== T79c0ff0Tb4b4b4)Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"font-black px-3 py-1 text-[11px]"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon
Tb4b4b4:Te6edf3iconTff7b72=Ta5d6ff"
Te6edf3appInfoTb4b4b4.Te6edf3integrity_issuesTb4b4b4.Te6edf3length Tff7b72=== T79c0ff0
Tff7b72? Ta5d6ff'mdi-shield-check'
Tff7b72: Ta5d6ff'mdi-shield-alert'
Ta5d6ff"
Te6edf3sizeTff7b72=Ta5d6ff"14"
Te6edf3start
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Tff7b72{{
Te6edf3appInfoTb4b4b4.Te6edf3integrity_issuesTb4b4b4.Te6edf3length Tff7b72=== T79c0ff0
Tff7b72? Te6edf3$tTb4b4b4(Ta5d6ff"about.secured"Tb4b4b4)
Tff7b72: Te6edf3$tTb4b4b4(Ta5d6ff"about.tampering_detected"Tb4b4b4)
Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3appInfoTb4b4b4.Te6edf3integrity_issuesTb4b4b4.Te6edf3length Tff7b72> T79c0ff0Ta5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"secondary-chip px-3 py-1 text-[11px] font-black"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3acknowledgeIntegrityTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-check-circle" Te6edf3sizeTff7b72=Ta5d6ff"14" Te6edf3startTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"common.acknowledge_reset"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3appInfoTb4b4b4.Te6edf3integrity_issues Tff7b72&& Te6edf3appInfoTb4b4b4.Te6edf3integrity_issuesTb4b4b4.Te6edf3length Tff7b72> T79c0ff0Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"p-4 bg-red-50 dark:bg-red-950/30 border border-red-200 dark:border-red-900 rounded-xl"
Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"text-xs font-black text-red-700 dark:text-red-400 mb-3 uppercase tracking-wider flex items-center gap-2"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-alert-octagon" Te6edf3sizeTff7b72=Ta5d6ff"16"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Technical Issues Detected
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"text-[11px] text-red-600 dark:text-red-300 space-y-2 list-none font-mono"Tb4b4b4>
Tb4b4b4<Tff7b72li
Te6edf3v-forTff7b72=Ta5d6ff"Tb4b4b4(Te6edf3issueTb4b4b4, Te6edf3indexTb4b4b4) Tff7b72in Te6edf3appInfoTb4b4b4.Te6edf3integrity_issuesTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3indexTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"flex gap-2"
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"opacity-50"Tb4b4b4>•Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72spanTb4b4b4>Tff7b72{{ Te6edf3issue Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-else
Te6edf3classTff7b72=Ta5d6ff"text-sm text-gray-500 dark:text-zinc-500 flex items-center gap-3 bg-emerald-500/5 p-4 rounded-xl border border-emerald-500/10"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-check-decagram" Te6edf3colorTff7b72=Ta5d6ff"emerald" Te6edf3sizeTff7b72=Ta5d6ff"20"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"font-bold tracking-tight"Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"about.no_integrity_violations"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Dependency Chain -->
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3appInfoTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"glass-card !p-6"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"text-xs font-black text-blue-500 uppercase tracking-[0.2em] mb-8 flex items-center gap-2"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-link-variant" Te6edf3sizeTff7b72=Ta5d6ff"14"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Dependency Chain
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"grid grid-cols-1 lg:grid-cols-2 gap-12 relative"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col space-y-8"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-5"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"w-12 h-12 rounded-2xl bg-blue-500/10 flex items-center justify-center border border-blue-500/20 shadow-sm"
Tb4b4b4>
Tb4b4b4<Tff7b72img
Te6edf3srcTff7b72=Ta5d6ff"../../public/favicons/favicon-512x512.png"
Te6edf3classTff7b72=Ta5d6ff"w-7 h-7 object-contain"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm font-black text-gray-900 dark:text-white"Tb4b4b4>
MeshChatX
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs font-mono font-bold text-gray-400"Tb4b4b4>
vTff7b72{{ Te6edf3appInfoTb4b4b4.Te6edf3version Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-5 pl-5 border-l-2 border-zinc-100 dark:border-zinc-800 ml-6 relative"
Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"absolute -left-[2px] top-0 bottom-0 w-[2px] bg-gradient-to-b from-blue-500 to-purple-500"
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"w-12 h-12 rounded-2xl bg-purple-500/10 flex items-center justify-center border border-purple-500/20 text-purple-600 font-black text-[10px] tracking-tighter shadow-sm"
Tb4b4b4>
LXMF
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm font-black text-gray-900 dark:text-white leading-tight"Tb4b4b4>
Lightweight Extensible Message Format
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs font-mono font-bold text-gray-400 mt-1"Tb4b4b4>
vTff7b72{{ Te6edf3appInfoTb4b4b4.Te6edf3lxmf_version Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-5 pl-5 border-l-2 border-zinc-100 dark:border-zinc-800 ml-6 relative"
Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"absolute -left-[2px] top-0 bottom-0 w-[2px] bg-gradient-to-b from-purple-500 to-indigo-500"
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"w-12 h-12 rounded-2xl bg-indigo-500/10 flex items-center justify-center border border-indigo-500/20 text-indigo-600 font-black text-[10px] tracking-tighter shadow-sm"
Tb4b4b4>
RNS
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm font-black text-gray-900 dark:text-white leading-tight"Tb4b4b4>
Reticulum Network Stack
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs font-mono font-bold text-gray-400 mt-1"Tb4b4b4>
vTff7b72{{ Te6edf3appInfoTb4b4b4.Te6edf3rns_version Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-8"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"bg-zinc-50 dark:bg-zinc-950 p-5 rounded-2xl border border-zinc-100 dark:border-zinc-800"
Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"text-[10px] font-black text-gray-400 dark:text-zinc-600 uppercase tracking-[0.2em] mb-4"
Tb4b4b4>
Core Runtime
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"grid grid-cols-2 gap-x-6 gap-y-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3appInfoTb4b4b4.Te6edf3lxst_versionTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"flex flex-col"Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"text-[9px] font-black text-blue-500/60 uppercase leading-none"
Tb4b4b4>LXST EngineTb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"text-[11px] font-mono font-bold mt-1.5 opacity-90 tracking-tight"
Tb4b4b4>vTff7b72{{ Te6edf3appInfoTb4b4b4.Te6edf3lxst_version Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3electronVersionTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"flex flex-col"Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"text-[9px] font-black text-blue-500/60 uppercase leading-none"
Tb4b4b4>ElectronTb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"text-[11px] font-mono font-bold mt-1.5 opacity-90 tracking-tight"
Tb4b4b4>vTff7b72{{ Te6edf3electronVersion Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3chromeVersionTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"flex flex-col"Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"text-[9px] font-black text-blue-500/60 uppercase leading-none"
Tb4b4b4>ChromeTb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"text-[11px] font-mono font-bold mt-1.5 opacity-90 tracking-tight"
Tb4b4b4>vTff7b72{{ Te6edf3chromeVersion Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3nodeVersionTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"flex flex-col"Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"text-[9px] font-black text-blue-500/60 uppercase leading-none"
Tb4b4b4>Node.jsTb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"text-[11px] font-mono font-bold mt-1.5 opacity-90 tracking-tight"
Tb4b4b4>vTff7b72{{ Te6edf3nodeVersion Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3appInfoTb4b4b4.Te6edf3dependenciesTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"pt-2"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"text-[10px] font-black text-gray-400 dark:text-zinc-600 uppercase tracking-[0.2em] mb-4"
Tb4b4b4>
Backend Stack
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"grid grid-cols-2 sm:grid-cols-3 gap-x-6 gap-y-4"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-forTff7b72=Ta5d6ff"Tb4b4b4(Te6edf3versionTb4b4b4, Te6edf3nameTb4b4b4) Tff7b72in Te6edf3appInfoTb4b4b4.Te6edf3dependenciesTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3nameTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"flex flex-col"
Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"text-[9px] font-black text-gray-400 dark:text-zinc-600 uppercase truncate leading-none"
Tb4b4b4>Tff7b72{{ Te6edf3nameTb4b4b4.Te6edf3replaceTb4b4b4(Ta5d6ff"_"Tb4b4b4, Ta5d6ff" "Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"text-[10px] font-mono font-bold mt-1.5 opacity-50 tracking-tight"
Tb4b4b4>vTff7b72{{ Te6edf3version Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Database Health -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"glass-card !p-6"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col gap-4 md:flex-row md:items-center md:justify-between mb-8"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"text-xs font-black text-blue-500 uppercase tracking-[0.2em] flex items-center gap-2"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-database-cog" Te6edf3sizeTff7b72=Ta5d6ff"14"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Database Health & Maintenance
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-wrap gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72v-btn
Te6edf3variantTff7b72=Ta5d6ff"tonal"
Te6edf3sizeTff7b72=Ta5d6ff"small"
Te6edf3classTff7b72=Ta5d6ff"font-black px-4 rounded-lg"
Tb4b4b4:Te6edf3loadingTff7b72=Ta5d6ff"Te6edf3healthLoadingTa5d6ff"
Tb4b4b4:Te6edf3disabledTff7b72=Ta5d6ff"Te6edf3databaseActionInProgressTa5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3getDatabaseHealthTb4b4b4(Tff7b72trueTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-refresh" Te6edf3start Te6edf3sizeTff7b72=Ta5d6ff"14"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4> Refresh
Tb4b4b4<Tb4b4b4/Tff7b72v-btnTb4b4b4>
Tb4b4b4<Tff7b72v-btn
Te6edf3variantTff7b72=Ta5d6ff"flat"
Te6edf3colorTff7b72=Ta5d6ff"blue"
Te6edf3sizeTff7b72=Ta5d6ff"small"
Te6edf3classTff7b72=Ta5d6ff"font-black px-4 rounded-lg"
Tb4b4b4:Te6edf3loadingTff7b72=Ta5d6ff"Te6edf3databaseActionInProgressTa5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3vacuumDatabaseTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-broom" Te6edf3start Te6edf3sizeTff7b72=Ta5d6ff"14"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4> Vacuum
Tb4b4b4<Tb4b4b4/Tff7b72v-btnTb4b4b4>
Tb4b4b4<Tff7b72v-btn
Te6edf3variantTff7b72=Ta5d6ff"flat"
Te6edf3colorTff7b72=Ta5d6ff"amber"
Te6edf3sizeTff7b72=Ta5d6ff"small"
Te6edf3classTff7b72=Ta5d6ff"font-black px-4 rounded-lg text-white"
Tb4b4b4:Te6edf3loadingTff7b72=Ta5d6ff"Te6edf3databaseActionInProgressTa5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3runRecoveryTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-medical-bag" Te6edf3start Te6edf3sizeTff7b72=Ta5d6ff"14"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4> Recovery
Tb4b4b4<Tb4b4b4/Tff7b72v-btnTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3databaseHealthTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"grid grid-cols-2 md:grid-cols-4 gap-8 mb-8"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"bg-zinc-50 dark:bg-zinc-950 p-4 rounded-2xl border border-zinc-100 dark:border-zinc-800 shadow-inner"
Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"text-[9px] font-black text-gray-400 dark:text-zinc-600 uppercase tracking-[0.2em] mb-2 leading-none"
Tb4b4b4>
Integrity
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4[
Te6edf3databaseHealthTb4b4b4.Te6edf3quick_check Tff7b72=== Ta5d6ff'ok' Tff7b72? Ta5d6ff'text-emerald-500' Tff7b72: Ta5d6ff'text-red-500'Tb4b4b4,
Tb4b4b4]Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-lg font-black uppercase tracking-tight"
Tb4b4b4>
Tff7b72{{ Te6edf3databaseHealthTb4b4b4.Te6edf3quick_check Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"bg-zinc-50 dark:bg-zinc-950 p-4 rounded-2xl border border-zinc-100 dark:border-zinc-800 shadow-inner"
Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"text-[9px] font-black text-gray-400 dark:text-zinc-600 uppercase tracking-[0.2em] mb-2 leading-none"
Tb4b4b4>
Journal
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-lg font-black uppercase text-blue-500 tracking-tight"Tb4b4b4>
Tff7b72{{ Te6edf3databaseHealthTb4b4b4.Te6edf3journal_mode Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"bg-zinc-50 dark:bg-zinc-950 p-4 rounded-2xl border border-zinc-100 dark:border-zinc-800 shadow-inner"
Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"text-[9px] font-black text-gray-400 dark:text-zinc-600 uppercase tracking-[0.2em] mb-2 leading-none"
Tb4b4b4>
Page Count
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-lg font-black font-mono tracking-tight tabular-nums"Tb4b4b4>
Tff7b72{{ Te6edf3databaseHealthTb4b4b4.Te6edf3page_count Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"bg-zinc-50 dark:bg-zinc-950 p-4 rounded-2xl border border-zinc-100 dark:border-zinc-800 shadow-inner"
Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"text-[9px] font-black text-gray-400 dark:text-zinc-600 uppercase tracking-[0.2em] mb-2 leading-none"
Tb4b4b4>
Free Space
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-lg font-black text-amber-500 tracking-tight tabular-nums"Tb4b4b4>
Tff7b72{{ Te6edf3formatBytesTb4b4b4(Te6edf3databaseHealthTb4b4b4.Te6edf3estimated_free_bytesTb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"border-t border-zinc-100 dark:border-zinc-800 pt-8 space-y-8"Tb4b4b4>
T8b949e<!-- Backups -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col md:flex-row md:items-center justify-between gap-6"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-1"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"font-black text-gray-900 dark:text-white text-sm tracking-tight flex items-center gap-2"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon
Te6edf3iconTff7b72=Ta5d6ff"mdi-content-save-all"
Te6edf3sizeTff7b72=Ta5d6ff"16"
Te6edf3classTff7b72=Ta5d6ff"text-blue-500"
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Database Backups
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs text-gray-500"Tb4b4b4>
Full snapshots of your communications database.
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72v-btn
Te6edf3variantTff7b72=Ta5d6ff"tonal"
Te6edf3colorTff7b72=Ta5d6ff"blue"
Te6edf3classTff7b72=Ta5d6ff"font-black rounded-xl"
Tb4b4b4:Te6edf3loadingTff7b72=Ta5d6ff"Te6edf3backupInProgressTa5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3backupDatabaseTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-download" Te6edf3startTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Download Backup
Tb4b4b4<Tb4b4b4/Tff7b72v-btnTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Snapshots -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-6"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col md:flex-row md:items-center justify-between gap-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-1"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"font-black text-gray-900 dark:text-white text-sm tracking-tight flex items-center gap-2"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-camera" Te6edf3sizeTff7b72=Ta5d6ff"16" Te6edf3classTff7b72=Ta5d6ff"text-purple-500"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Local Snapshots
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs text-gray-500"Tb4b4b4>
Create point-in-time restore points on disk.
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex gap-2 w-full md:w-auto"Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3snapshotNameTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"text"
Te6edf3placeholderTff7b72=Ta5d6ff"Snapshot label..."
Te6edf3classTff7b72=Ta5d6ff"bg-zinc-50 dark:bg-zinc-900 px-4 py-2 rounded-xl text-sm border border-zinc-100 dark:border-zinc-800 focus:outline-none focus:ring-2 focus:ring-blue-500/20 flex-1 md:min-w-[200px]"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72v-btn
Te6edf3colorTff7b72=Ta5d6ff"purple"
Te6edf3classTff7b72=Ta5d6ff"font-black rounded-xl"
Tb4b4b4:Te6edf3loadingTff7b72=Ta5d6ff"Te6edf3snapshotInProgressTa5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3createSnapshotTa5d6ff"
Tb4b4b4>
Create
Tb4b4b4<Tb4b4b4/Tff7b72v-btnTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3snapshotsTb4b4b4.Te6edf3length Tff7b72> T79c0ff0Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"grid gap-3 sm:grid-cols-2"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3snapshot Tff7b72in Te6edf3snapshotsTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3snapshotTb4b4b4.Te6edf3pathTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between p-4 rounded-2xl bg-zinc-50 dark:bg-zinc-900 border border-zinc-100 dark:border-zinc-800 hover:border-purple-500/20 transition-all group"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col"Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"font-black text-gray-900 dark:text-white text-xs truncate max-w-[150px]"
Tb4b4b4>Tff7b72{{ Te6edf3snapshotTb4b4b4.Te6edf3name Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"text-[10px] font-bold text-gray-400 mt-1 tabular-nums"
Tb4b4b4>Tff7b72{{ Te6edf3formatBytesTb4b4b4(Te6edf3snapshotTb4b4b4.Te6edf3sizeTb4b4b4) Tff7b72}} • Tff7b72{{ Te6edf3snapshotTb4b4b4.Te6edf3created_at Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72v-btn
Te6edf3variantTff7b72=Ta5d6ff"tonal"
Te6edf3sizeTff7b72=Ta5d6ff"x-small"
Te6edf3colorTff7b72=Ta5d6ff"purple"
Te6edf3classTff7b72=Ta5d6ff"font-black opacity-0 group-hover:opacity-100 transition-opacity"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3restoreFromSnapshotTb4b4b4(Te6edf3snapshotTb4b4b4.Te6edf3pathTb4b4b4)Ta5d6ff"
Tb4b4b4>
Restore
Tb4b4b4<Tb4b4b4/Tff7b72v-btnTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Identity Section -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"bg-red-500/5 p-6 rounded-2xl border border-red-500/10 space-y-6"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-4 text-red-500"Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-key-alert" Te6edf3sizeTff7b72=Ta5d6ff"24"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-0.5"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"font-black text-sm tracking-tight"Tb4b4b4>Identity Key ControlTb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"text-[10px] font-bold uppercase tracking-widest opacity-70 italic"
Tb4b4b4>
Critical Security Warning
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-wrap gap-3"Tb4b4b4>
Tb4b4b4<Tff7b72v-btn
Te6edf3variantTff7b72=Ta5d6ff"flat"
Te6edf3colorTff7b72=Ta5d6ff"red"
Te6edf3classTff7b72=Ta5d6ff"font-black rounded-xl"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3downloadIdentityFileTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-file-export" Te6edf3startTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Export Key File
Tb4b4b4<Tb4b4b4/Tff7b72v-btnTb4b4b4>
Tb4b4b4<Tff7b72v-btn
Te6edf3variantTff7b72=Ta5d6ff"tonal"
Te6edf3colorTff7b72=Ta5d6ff"red"
Te6edf3classTff7b72=Ta5d6ff"font-black rounded-xl"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3copyIdentityBase32Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-content-copy" Te6edf3startTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Copy Base32 Key
Tb4b4b4<Tb4b4b4/Tff7b72v-btnTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-4 pt-4 border-t border-red-500/10"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-[10px] font-black text-red-500/60 uppercase tracking-widest"Tb4b4b4>
Restore Identity
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col sm:flex-row gap-3"Tb4b4b4>
Tb4b4b4<Tff7b72v-btn
Te6edf3variantTff7b72=Ta5d6ff"tonal"
Te6edf3colorTff7b72=Ta5d6ff"zinc"
Te6edf3classTff7b72=Ta5d6ff"font-black rounded-xl flex-1 border-dashed border-2"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3$refsTb4b4b4.Te6edf3identityFileInputTb4b4b4.Te6edf3clickTb4b4b4(Tb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-upload" Te6edf3startTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Upload Key File
Tb4b4b4<Tb4b4b4/Tff7b72v-btnTb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3refTff7b72=Ta5d6ff"identityFileInput"
Te6edf3typeTff7b72=Ta5d6ff"file"
Te6edf3acceptTff7b72=Ta5d6ff".identity,.bin,.key"
Te6edf3classTff7b72=Ta5d6ff"hidden"
Tb4b4b4@Te6edf3changeTff7b72=Ta5d6ff"Te6edf3onIdentityRestoreFileChangeTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"text-center sm:py-2 text-[10px] font-black text-zinc-400 uppercase italic px-2 shrink-0 self-center"
Tb4b4b4>
— or —
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72v-btn
Te6edf3variantTff7b72=Ta5d6ff"tonal"
Te6edf3colorTff7b72=Ta5d6ff"zinc"
Te6edf3classTff7b72=Ta5d6ff"font-black rounded-xl flex-1 border-dashed border-2"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3showIdentityPaste Tff7b72= Tff7b72!Te6edf3showIdentityPasteTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-clipboard-text" Te6edf3startTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Paste Base32
Tb4b4b4<Tb4b4b4/Tff7b72v-btnTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72transition Te6edf3nameTff7b72=Ta5d6ff"fade-blur"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3showIdentityPasteTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"space-y-3"Tb4b4b4>
Tb4b4b4<Tff7b72textarea
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3identityRestoreBase32Ta5d6ff"
Te6edf3rowsTff7b72=Ta5d6ff"4"
Te6edf3placeholderTff7b72=Ta5d6ff"Paste your base32 identity key here..."
Te6edf3classTff7b72=Ta5d6ff"w-full bg-white dark:bg-zinc-950 p-4 rounded-xl font-mono text-xs border border-zinc-100 dark:border-zinc-800 focus:outline-none focus:ring-2 focus:ring-red-500/20"
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72textareaTb4b4b4>
Tb4b4b4<Tff7b72v-btn
Te6edf3block
Te6edf3colorTff7b72=Ta5d6ff"red"
Te6edf3classTff7b72=Ta5d6ff"font-black rounded-xl"
Tb4b4b4:Te6edf3loadingTff7b72=Ta5d6ff"Te6edf3identityRestoreInProgressTa5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3restoreIdentityBase32Ta5d6ff"
Tb4b4b4>
Confirm Key Restore
Tb4b4b4<Tb4b4b4/Tff7b72v-btnTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72transitionTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72transitionTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>
Tb4b4b4<Tff7b72scriptTb4b4b4>
Tff7b72import Te6edf3Utils Tff7b72from Ta5d6ff"../../js/Utils"Tb4b4b4;
Tff7b72import Te6edf3ElectronUtils Tff7b72from Ta5d6ff"../../js/ElectronUtils"Tb4b4b4;
Tff7b72import Te6edf3DialogUtils Tff7b72from Ta5d6ff"../../js/DialogUtils"Tb4b4b4;
Tff7b72import Te6edf3MaterialDesignIcon Tff7b72from Ta5d6ff"../MaterialDesignIcon.vue"Tb4b4b4;
Tff7b72import Te6edf3ToastUtils Tff7b72from Ta5d6ff"../../js/ToastUtils"Tb4b4b4;
Tff7b72export Tff7b72default Tb4b4b4{
Te6edf3nameTff7b72: Ta5d6ff"AboutPage"Tb4b4b4,
Te6edf3componentsTff7b72: Tb4b4b4{
Te6edf3MaterialDesignIconTb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3dataTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4{
Te6edf3appInfoTff7b72: Tff7b72nullTb4b4b4,
Te6edf3configTff7b72: Tff7b72nullTb4b4b4,
Te6edf3updateIntervalTff7b72: Tff7b72nullTb4b4b4,
Te6edf3healthIntervalTff7b72: Tff7b72nullTb4b4b4,
Te6edf3databaseHealthTff7b72: Tff7b72nullTb4b4b4,
Te6edf3databaseRecoveryActionsTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3databaseActionMessageTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3databaseActionErrorTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3databaseActionInProgressTff7b72: Tff7b72falseTb4b4b4,
Te6edf3healthLoadingTff7b72: Tff7b72falseTb4b4b4,
Te6edf3electronMemoryUsageTff7b72: Tff7b72nullTb4b4b4,
Te6edf3backupInProgressTff7b72: Tff7b72falseTb4b4b4,
Te6edf3backupMessageTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3backupErrorTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3restoreInProgressTff7b72: Tff7b72falseTb4b4b4,
Te6edf3restoreMessageTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3restoreErrorTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3restoreFileNameTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3restoreFileTff7b72: Tff7b72nullTb4b4b4,
Te6edf3snapshotNameTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3snapshotsTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3snapshotInProgressTff7b72: Tff7b72falseTb4b4b4,
Te6edf3snapshotMessageTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3snapshotErrorTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3identityBackupMessageTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3identityBackupErrorTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3identityBase32Tff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3identityBase32MessageTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3identityBase32ErrorTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3identityRestoreInProgressTff7b72: Tff7b72falseTb4b4b4,
Te6edf3identityRestoreMessageTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3identityRestoreErrorTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3identityRestoreFileNameTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3identityRestoreFileTff7b72: Tff7b72nullTb4b4b4,
Te6edf3identityRestoreBase32Tff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3electronVersionTff7b72: Tff7b72nullTb4b4b4,
Te6edf3chromeVersionTff7b72: Tff7b72nullTb4b4b4,
Te6edf3nodeVersionTff7b72: Tff7b72nullTb4b4b4,
Te6edf3showAdvancedTff7b72: Tff7b72falseTb4b4b4,
Te6edf3showIdentityPasteTff7b72: Tff7b72falseTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3computedTff7b72: Tb4b4b4{
Te6edf3isElectronTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3ElectronUtilsTb4b4b4.Te6edf3isElectronTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3mountedTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3getAppInfoTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getConfigTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getDatabaseHealthTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3listSnapshotsTb4b4b4(Tb4b4b4)Tb4b4b4;
T8b949e// Update stats every 5 seconds
Tff7b72thisTb4b4b4.Te6edf3updateInterval Tff7b72= Te6edf3setIntervalTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3getAppInfoTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4, T79c0ff5000Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3healthInterval Tff7b72= Te6edf3setIntervalTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3getDatabaseHealthTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4, T79c0ff30000Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3beforeUnmountTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3updateIntervalTb4b4b4) Tb4b4b4{
Te6edf3clearIntervalTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3updateIntervalTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3healthIntervalTb4b4b4) Tb4b4b4{
Te6edf3clearIntervalTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3healthIntervalTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3methodsTff7b72: Tb4b4b4{
Tff7b72async Te6edf3listSnapshotsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/database/snapshots"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3snapshots Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Ta5d6ff"Failed to list snapshots"Tb4b4b4, Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3createSnapshotTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3snapshotInProgressTb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3snapshotInProgress Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3snapshotMessage Tff7b72= Ta5d6ff""Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3snapshotError Tff7b72= Ta5d6ff""Tb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/database/snapshot"Tb4b4b4, Tb4b4b4{
Te6edf3nameTff7b72: Tff7b72thisTb4b4b4.Te6edf3snapshotName Tff7b72|| Ta5d6ff`Ta5d6ffsnapshot-Tffd700${Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Tffa657DateTb4b4b4.Te6edf3nowTb4b4b4(Tb4b4b4) Tff7b72/ T79c0ff1000Tb4b4b4)Tffd700}Ta5d6ff`Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3snapshotMessage Tff7b72= Ta5d6ff"Snapshot created successfully"Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3snapshotName Tff7b72= Ta5d6ff""Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3listSnapshotsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3snapshotError Tff7b72= Ta5d6ff"Failed to create snapshot"Tb4b4b4;
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3snapshotInProgress Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3restoreFromSnapshotTb4b4b4(Te6edf3pathTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(
Tff7b72!Tb4b4b4(Tff7b72await Te6edf3DialogUtilsTb4b4b4.Te6edf3confirmTb4b4b4(
Ta5d6ff"Are you sure you want to restore this snapshot? This will overwrite the current database and require an app relaunch."
Tb4b4b4)Tb4b4b4)
Tb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/database/restore"Tb4b4b4, Tb4b4b4{ Te6edf3path Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3status Tff7b72=== Ta5d6ff"success"Tb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Ta5d6ff"Database restored. Relaunching..."Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3isElectronTb4b4b4) Tb4b4b4{
Te6edf3setTimeoutTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3ElectronUtilsTb4b4b4.Te6edf3relaunchTb4b4b4(Tb4b4b4)Tb4b4b4, T79c0ff2000Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Failed to restore snapshot"Tb4b4b4)Tb4b4b4;
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3getAppInfoTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/app/info"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3appInfo Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3app_infoTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3isElectronTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3electronMemoryUsage Tff7b72= Tff7b72await Te6edf3ElectronUtilsTb4b4b4.Te6edf3getMemoryUsageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3electronVersion Tff7b72= Tffa657windowTb4b4b4.Te6edf3electronTb4b4b4.Te6edf3electronVersionTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3chromeVersion Tff7b72= Tffa657windowTb4b4b4.Te6edf3electronTb4b4b4.Te6edf3chromeVersionTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3nodeVersion Tff7b72= Tffa657windowTb4b4b4.Te6edf3electronTb4b4b4.Te6edf3nodeVersionTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
T8b949e// do nothing if failed to load app info
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3acknowledgeIntegrityTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(
Tff7b72await Te6edf3DialogUtilsTb4b4b4.Te6edf3confirmTb4b4b4(
Ta5d6ff"Are you sure you want to acknowledge these integrity issues? This will update the security manifest to match the current state of your files."
Tb4b4b4)
Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/app/integrity/acknowledge"Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Ta5d6ff"Integrity issues acknowledged"Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getAppInfoTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Failed to acknowledge integrity issues"Tb4b4b4)Tb4b4b4;
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3getDatabaseHealthTb4b4b4(Te6edf3showMessage Tff7b72= Tff7b72falseTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3healthLoading Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/database/health"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3databaseHealth Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3databaseTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3showMessageTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3databaseActionMessage Tff7b72= Ta5d6ff"Database health refreshed"Tb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3databaseActionError Tff7b72= Ta5d6ff""Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3databaseActionError Tff7b72= Ta5d6ff"Failed to load database health"Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3healthLoading Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3vacuumDatabaseTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3databaseActionInProgressTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3databaseActionInProgress Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3databaseActionMessage Tff7b72= Ta5d6ff""Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3databaseActionError Tff7b72= Ta5d6ff""Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3databaseRecoveryActions Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/database/vacuum"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3databaseTff7b72?Tb4b4b4.Te6edf3healthTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3databaseHealth Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3databaseTb4b4b4.Te6edf3healthTb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3databaseActionMessage Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3message Tff7b72|| Ta5d6ff"Database vacuum completed"Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3databaseActionError Tff7b72= Ta5d6ff"Vacuum failed"Tb4b4b4;
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3databaseActionInProgress Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3backupDatabaseTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3backupInProgressTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3backupInProgress Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3backupMessage Tff7b72= Ta5d6ff""Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3backupError Tff7b72= Ta5d6ff""Tb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/database/backup/download"Tb4b4b4, Tb4b4b4{
Te6edf3responseTypeTff7b72: Ta5d6ff"blob"Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3blob Tff7b72= Tff7b72new Te6edf3BlobTb4b4b4(Tb4b4b4[Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4]Tb4b4b4, Tb4b4b4{ Te6edf3typeTff7b72: Ta5d6ff"application/zip" Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3url Tff7b72= Tffa657windowTb4b4b4.Te6edf3URLTb4b4b4.Te6edf3createObjectURLTb4b4b4(Te6edf3blobTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3link Tff7b72= Tffa657documentTb4b4b4.Te6edf3createElementTb4b4b4(Ta5d6ff"a"Tb4b4b4)Tb4b4b4;
Te6edf3linkTb4b4b4.Te6edf3href Tff7b72= Te6edf3urlTb4b4b4;
Tff7b72const Te6edf3filename Tff7b72=
Te6edf3responseTb4b4b4.Te6edf3headersTb4b4b4[Ta5d6ff"content-disposition"Tb4b4b4]Tff7b72?Tb4b4b4.Te6edf3splitTb4b4b4(Ta5d6ff"filename="Tb4b4b4)Tff7b72?Tb4b4b4.Tb4b4b4[T79c0ff1Tb4b4b4]Tff7b72?Tb4b4b4.Te6edf3replaceTb4b4b4(Ta5d6ff/"/gTb4b4b4, Ta5d6ff""Tb4b4b4) Tff7b72||
Ta5d6ff"meshchatx-backup.zip"Tb4b4b4;
Te6edf3linkTb4b4b4.Te6edf3setAttributeTb4b4b4(Ta5d6ff"download"Tb4b4b4, Te6edf3filenameTb4b4b4)Tb4b4b4;
Tffa657documentTb4b4b4.Te6edf3bodyTb4b4b4.Te6edf3appendChildTb4b4b4(Te6edf3linkTb4b4b4)Tb4b4b4;
Te6edf3linkTb4b4b4.Te6edf3clickTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3linkTb4b4b4.Te6edf3removeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657windowTb4b4b4.Te6edf3URLTb4b4b4.Te6edf3revokeObjectURLTb4b4b4(Te6edf3urlTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3backupMessage Tff7b72= Ta5d6ff"Backup downloaded"Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getDatabaseHealthTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3backupError Tff7b72= Ta5d6ff"Backup failed"Tb4b4b4;
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3backupInProgress Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3restoreDatabaseTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3restoreInProgressTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3restoreFileTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3restoreError Tff7b72= Ta5d6ff"Select a backup file to restore."Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3restoreInProgress Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3restoreMessage Tff7b72= Ta5d6ff""Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3restoreError Tff7b72= Ta5d6ff""Tb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3formData Tff7b72= Tff7b72new Te6edf3FormDataTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3formDataTb4b4b4.Te6edf3appendTb4b4b4(Ta5d6ff"file"Tb4b4b4, Tff7b72thisTb4b4b4.Te6edf3restoreFileTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/database/restore"Tb4b4b4, Te6edf3formDataTb4b4b4, Tb4b4b4{
Te6edf3headersTff7b72: Tb4b4b4{ Ta5d6ff"Content-Type"Tff7b72: Ta5d6ff"multipart/form-data" Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3restoreMessage Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3message Tff7b72|| Ta5d6ff"Database restored"Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3databaseHealth Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3databaseTff7b72?Tb4b4b4.Te6edf3health Tff7b72|| Tff7b72thisTb4b4b4.Te6edf3databaseHealthTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3databaseRecoveryActions Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3databaseTff7b72?Tb4b4b4.Te6edf3actions Tff7b72|| Tff7b72thisTb4b4b4.Te6edf3databaseRecoveryActionsTb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getDatabaseHealthTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3restoreError Tff7b72= Ta5d6ff"Restore failed"Tb4b4b4;
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3restoreInProgress Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3runRecoveryTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3databaseActionInProgressTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3databaseActionInProgress Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3databaseActionMessage Tff7b72= Ta5d6ff""Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3databaseActionError Tff7b72= Ta5d6ff""Tb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/database/recover"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3databaseTff7b72?Tb4b4b4.Te6edf3healthTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3databaseHealth Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3databaseTb4b4b4.Te6edf3healthTb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3databaseRecoveryActions Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3databaseTff7b72?Tb4b4b4.Te6edf3actions Tff7b72|| Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3databaseActionMessage Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3message Tff7b72|| Ta5d6ff"Database recovery completed"Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3databaseActionError Tff7b72= Ta5d6ff"Recovery failed"Tb4b4b4;
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3databaseActionInProgress Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3getConfigTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/config"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3config Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3configTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
T8b949e// do nothing if failed to load config
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3copyValueTb4b4b4(Te6edf3valueTb4b4b4, Te6edf3labelTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3valueTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72try Tb4b4b4{
Tff7b72await Te6edf3navigatorTb4b4b4.Te6edf3clipboardTb4b4b4.Te6edf3writeTextTb4b4b4(Te6edf3valueTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Ta5d6ff`Tffd700${Te6edf3labelTffd700}Ta5d6ff copied to clipboardTa5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff`Ta5d6ffFailed to copy Tffd700${Te6edf3labelTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3relaunchTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3ElectronUtilsTb4b4b4.Te6edf3relaunchTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3shutdownTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(
Tff7b72await Te6edf3DialogUtilsTb4b4b4.Te6edf3confirmTb4b4b4(
Ta5d6ff"Are you sure you want to shutdown the app? This will stop the server and close the application."
Tb4b4b4)
Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
T8b949e// try to notify backend first
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/app/shutdown"Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// ignore errors if backend is already stopping
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3isElectronTb4b4b4) Tb4b4b4{
Te6edf3ElectronUtilsTb4b4b4.Te6edf3shutdownTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Ta5d6ff"Shutdown command sent to server."Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3showChangelogTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3$routerTb4b4b4.Te6edf3pushTb4b4b4(Tb4b4b4{ Te6edf3nameTff7b72: Ta5d6ff"changelog" Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3showTutorialTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3$routerTb4b4b4.Te6edf3pushTb4b4b4(Tb4b4b4{ Te6edf3nameTff7b72: Ta5d6ff"tutorial" Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3showReticulumConfigFileTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3reticulumConfigPath Tff7b72= Tff7b72thisTb4b4b4.Te6edf3appInfoTb4b4b4.Te6edf3reticulum_config_pathTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3reticulumConfigPathTb4b4b4) Tb4b4b4{
Te6edf3ElectronUtilsTb4b4b4.Te6edf3showPathInFolderTb4b4b4(Te6edf3reticulumConfigPathTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3showDatabaseFileTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3databasePath Tff7b72= Tff7b72thisTb4b4b4.Te6edf3appInfoTb4b4b4.Te6edf3database_pathTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3databasePathTb4b4b4) Tb4b4b4{
Te6edf3ElectronUtilsTb4b4b4.Te6edf3showPathInFolderTb4b4b4(Te6edf3databasePathTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3formatBytesTff7b72: Tff7b72function Tb4b4b4(Te6edf3bytesTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3UtilsTb4b4b4.Te6edf3formatBytesTb4b4b4(Te6edf3bytesTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3formatNumberTff7b72: Tff7b72function Tb4b4b4(Te6edf3numTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3UtilsTb4b4b4.Te6edf3formatNumberTb4b4b4(Te6edf3numTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3formatBytesPerSecondTff7b72: Tff7b72function Tb4b4b4(Te6edf3bytesPerSecondTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3UtilsTb4b4b4.Te6edf3formatBytesPerSecondTb4b4b4(Te6edf3bytesPerSecondTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3onRestoreFileChangeTb4b4b4(Te6edf3eventTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3files Tff7b72= Te6edf3eventTb4b4b4.Te6edf3targetTb4b4b4.Te6edf3filesTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3files Tff7b72&& Te6edf3filesTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3restoreFile Tff7b72= Te6edf3filesTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3restoreFileName Tff7b72= Te6edf3filesTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4.Te6edf3nameTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3restoreError Tff7b72= Ta5d6ff""Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3restoreMessage Tff7b72= Ta5d6ff""Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3downloadIdentityFileTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3identityBackupMessage Tff7b72= Ta5d6ff""Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3identityBackupError Tff7b72= Ta5d6ff""Tb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/identity/backup/download"Tb4b4b4, Tb4b4b4{
Te6edf3responseTypeTff7b72: Ta5d6ff"blob"Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3blob Tff7b72= Tff7b72new Te6edf3BlobTb4b4b4(Tb4b4b4[Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4]Tb4b4b4, Tb4b4b4{ Te6edf3typeTff7b72: Ta5d6ff"application/octet-stream" Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3url Tff7b72= Tffa657windowTb4b4b4.Te6edf3URLTb4b4b4.Te6edf3createObjectURLTb4b4b4(Te6edf3blobTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3link Tff7b72= Tffa657documentTb4b4b4.Te6edf3createElementTb4b4b4(Ta5d6ff"a"Tb4b4b4)Tb4b4b4;
Te6edf3linkTb4b4b4.Te6edf3href Tff7b72= Te6edf3urlTb4b4b4;
Te6edf3linkTb4b4b4.Te6edf3setAttributeTb4b4b4(Ta5d6ff"download"Tb4b4b4, Ta5d6ff"identity"Tb4b4b4)Tb4b4b4;
Tffa657documentTb4b4b4.Te6edf3bodyTb4b4b4.Te6edf3appendChildTb4b4b4(Te6edf3linkTb4b4b4)Tb4b4b4;
Te6edf3linkTb4b4b4.Te6edf3clickTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3linkTb4b4b4.Te6edf3removeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657windowTb4b4b4.Te6edf3URLTb4b4b4.Te6edf3revokeObjectURLTb4b4b4(Te6edf3urlTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3identityBackupMessage Tff7b72= Ta5d6ff"Identity downloaded. Keep it secret."Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3identityBackupError Tff7b72= Ta5d6ff"Failed to download identity"Tb4b4b4;
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3copyIdentityBase32Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3identityBase32Message Tff7b72= Ta5d6ff""Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3identityBase32Error Tff7b72= Ta5d6ff""Tb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/identity/backup/base32"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3identityBase32 Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3identity_base32 Tff7b72|| Ta5d6ff""Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3identityBase32Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3identityBase32Error Tff7b72= Ta5d6ff"No identity available"Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72await Te6edf3navigatorTb4b4b4.Te6edf3clipboardTb4b4b4.Te6edf3writeTextTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3identityBase32Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3identityBase32Message Tff7b72= Ta5d6ff"Identity copied. Clear your clipboard after use."Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3identityBase32Error Tff7b72= Ta5d6ff"Failed to copy identity"Tb4b4b4;
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3onIdentityRestoreFileChangeTb4b4b4(Te6edf3eventTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3files Tff7b72= Te6edf3eventTb4b4b4.Te6edf3targetTb4b4b4.Te6edf3filesTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3files Tff7b72&& Te6edf3filesTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3identityRestoreFile Tff7b72= Te6edf3filesTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3identityRestoreFileName Tff7b72= Te6edf3filesTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4.Te6edf3nameTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3identityRestoreError Tff7b72= Ta5d6ff""Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3identityRestoreMessage Tff7b72= Ta5d6ff""Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3restoreIdentityFileTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3identityRestoreInProgressTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3identityRestoreFileTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3identityRestoreError Tff7b72= Ta5d6ff"Select an identity file to restore."Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3identityRestoreInProgress Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3identityRestoreMessage Tff7b72= Ta5d6ff""Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3identityRestoreError Tff7b72= Ta5d6ff""Tb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3formData Tff7b72= Tff7b72new Te6edf3FormDataTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3formDataTb4b4b4.Te6edf3appendTb4b4b4(Ta5d6ff"file"Tb4b4b4, Tff7b72thisTb4b4b4.Te6edf3identityRestoreFileTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/identity/restore"Tb4b4b4, Te6edf3formDataTb4b4b4, Tb4b4b4{
Te6edf3headersTff7b72: Tb4b4b4{ Ta5d6ff"Content-Type"Tff7b72: Ta5d6ff"multipart/form-data" Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3identityRestoreMessage Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3message Tff7b72|| Ta5d6ff"Identity restored. Restart app."Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3identityRestoreError Tff7b72= Ta5d6ff"Identity restore failed"Tb4b4b4;
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3identityRestoreInProgress Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3restoreIdentityBase32Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3identityRestoreInProgressTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3identityRestoreBase32Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3identityRestoreError Tff7b72= Ta5d6ff"Provide a base32 key to restore."Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3identityRestoreInProgress Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3identityRestoreMessage Tff7b72= Ta5d6ff""Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3identityRestoreError Tff7b72= Ta5d6ff""Tb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/identity/restore"Tb4b4b4, Tb4b4b4{
Te6edf3base32Tff7b72: Tff7b72thisTb4b4b4.Te6edf3identityRestoreBase32Tb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3identityRestoreMessage Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3message Tff7b72|| Ta5d6ff"Identity restored. Restart app."Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3identityRestoreError Tff7b72= Ta5d6ff"Identity restore failed"Tb4b4b4;
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3identityRestoreInProgress Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3formatRecoveryResultTb4b4b4(Te6edf3valueTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3value Tff7b72=== Tff7b72null Tff7b72|| Te6edf3value Tff7b72=== Tff7b72undefinedTb4b4b4) Tb4b4b4{
Tff7b72return Ta5d6ff"—"Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tffa657ArrayTb4b4b4.Te6edf3isArrayTb4b4b4(Te6edf3valueTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3valueTb4b4b4.Te6edf3joinTb4b4b4(Ta5d6ff", "Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3valueTb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3statusPillClassTb4b4b4(Te6edf3isGoodTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3isGood
Tff7b72? Ta5d6ff"inline-flex items-center gap-1 rounded-full bg-emerald-100 text-emerald-700 px-3 py-1 text-xs font-semibold"
Tff7b72: Ta5d6ff"inline-flex items-center gap-1 rounded-full bg-orange-100 text-orange-700 px-3 py-1 text-xs font-semibold"Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4<Tb4b4b4/Tff7b72scriptTb4b4b4>
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────